package sharpen.core;
public class VODConfiguration extends Configuration {
VODConfiguration(String runtimeTypeName) {
super(runtimeTypeName);
setUpPrimitiveMappings();
setUpAnnotationMappings();
mapType("java.lang.System", runtimeTypeName);
mapMethod("java.lang.Math.abs", "System.Math.Abs");
mapMethod("java.lang.Math.min", "System.Math.Min");
mapMethod("java.lang.Math.max", "System.Math.Max");
mapMethod("java.lang.System.exit", "System.Environment.Exit");
mapType("java.lang.Cast", "Sharpen.Cast");
setUpIoMappings();
mapMethod("System.IO.TextWriter.flush", "Flush");
mapMethod("System.IO.TextWriter.print", "Write");
mapMethod("System.IO.TextWriter.println", "WriteLine");
setUpExceptionMappings();
//setUpCollectionMappings();
//mapType("java.lang.Cloneable", "System.ICloneable");
mapType("java.lang.Comparable", "System.IComparable");
mapMethod("java.lang.Comparable.compareTo", "CompareTo");
//mapType("java.util.Date", "System.DateTime");
mapMethod("java.lang.Object.toString", "ToString");
mapMethod("java.lang.Object.hashCode", "GetHashCode");
mapMethod("java.lang.Object.equals", "Equals");
mapMethod("java.lang.Float.isNaN", "float.IsNaN");
mapMethod("java.lang.Double.isNaN", "double.IsNaN");
setUpStringMappings();
mapMethod("java.lang.Throwable.printStackTrace", runtimeMethod("printStackTrace"));
//mapMethod("System.DateTime.TryParse", runtimeMethod("DateTimeTryParse"));
//mapMethod("System.Int64.TryParse", runtimeMethod("Int64TryParse"));
mapMethod("java.lang.System.arraycopy", "System.Array.Copy");
//mapMethod("java.lang.Object.clone", "MemberwiseClone");
mapMethod("java.lang.Object.wait", runtimeMethod("wait"));
mapMethod("java.lang.Object.notify", runtimeMethod("notify"));
mapMethod("java.lang.Object.notifyAll", runtimeMethod("notifyAll"));
mapMethod("java.lang.Object.getClass", runtimeMethod("getClassForObject"));
mapMethod("length", "Length"); // see qualifiedName(IVariableBinding)
//setUpPrimitiveWrappers();
//does not work that easily
//mapMethod("java.lang.Cast.ToUByte", "((byte)"); //"byte" in C# is ubyte in J#
//mapMethod("java.lang.Cast.FromUByte", "((sbyte)"); //"sbyte" in C# is byte in J#
mapType("java.util.Map.Entry", "java.util.MapEntry");
//VersantSocketChannel is just a placeholder
mapType("Versant.Persistence.RT.VersantSocketChannel", "java.nio.channels.SocketChannel");
//mapMethod("??? Array.clone", runtimeMethod("Clone"));
}
private void setUpPrimitiveMappings() {
mapType("boolean", "bool");
mapPrimitive("void");
mapPrimitive("char");
mapType("byte", "sbyte");
mapType("java.lang.ubyte", "byte"); //artificially introduced type
mapPrimitive("short");
mapPrimitive("int");
mapPrimitive("long");
mapPrimitive("float");
mapPrimitive("double");
mapType("java.lang.Object", "object");
mapType("java.lang.String", "string");
/*mapType("java.lang.Character", "char");
mapType("java.lang.Byte", "byte");
mapType("java.lang.Boolean", "bool");
mapType("java.lang.Short", "short");
mapType("java.lang.Integer", "int");
mapType("java.lang.Long", "long");
mapType("java.lang.Float", "float");
mapType("java.lang.Double", "double");*/
}
private void setUpExceptionMappings() {
mapType("java.lang.Throwable", "System.Exception");
mapProperty("java.lang.Throwable.getMessage", "Message");
mapProperty("java.lang.Throwable.getCause", "InnerException");
mapType("java.lang.Error", "System.Exception");
mapType("java.lang.OutOfMemoryError", "System.OutOfMemoryException");
mapType("java.lang.Exception", "System.Exception");
mapType("java.lang.RuntimeException", "System.Exception");
mapType("java.lang.ClassCastException", "System.InvalidCastException");
mapType("java.lang.NullPointerException", "System.ArgumentNullException");
mapType("java.lang.IllegalArgumentException", "System.ArgumentException");
mapType("java.lang.IllegalStateException", "System.InvalidOperationException");
//mapType("java.lang.InterruptedException", "System.Exception");
mapType("java.lang.IndexOutOfBoundsException", "System.IndexOutOfRangeException");
mapType("java.lang.UnsupportedOperationException", "System.NotSupportedException");
mapType("java.lang.ArrayIndexOutOfBoundsException", "System.IndexOutOfRangeException");
mapType("java.lang.NoSuchMethodError", "System.MissingMethodException");
mapType("java.io.IOException", "System.IO.IOException");
mapType("java.net.SocketException", "System.Net.Sockets.SocketException");
mapType("java.lang.SecurityException", "System.Security.SecurityException");
//in .NET: ArgumentNullException, FormatException, or OverflowException: common base class is System.SystemException
mapType("java.lang.NumberFormatException", "System.SystemException");
mapType("java.lang.NoSuchFieldException", "System.MissingFieldException");
mapType("java.rmi.NoSuchObjectException", "System.InvalidOperationException");
mapType("java.util.NoSuchElementException", "System.InvalidOperationException");
mapType("java.lang.NoSuchMethodException", "System.MissingMethodException");
mapType("java.lang.reflect.InvocationTargetException", "System.Reflection.TargetInvocationException");
mapType("java.lang.IllegalAccessException", "System.MethodAccessException");
mapType("java.io.FileNotFoundException", "System.IO.FileNotFoundException");
mapType("java.io.StreamCorruptedException", "System.IO.IOException");
mapType("java.io.UTFDataFormatException", "System.IO.IOException");
mapType("java.io.InvalidObjectException", "System.Runtime.Serialization.InvalidDataContractException");
mapType("java.util.ConcurrentModificationException", "System.InvalidOperationException");
//I've tried interfaces and abstract classes with System.Activator.CreateInstance,
//and both attempts yield 'MissingMethodException' and not 'MemberAccessException'
mapType("java.lang.InstantiationException", "System.MissingMethodException");
}
public boolean isIgnoredExceptionType(String exceptionType) {
return exceptionType.equals("java.lang.CloneNotSupportedException") ||
exceptionType.equals("java.lang.InterruptedException");
}
public boolean mapProtectedToProtectedInternal() {
return true;
}
@Override
public boolean mapByteToSbyte() {
return true;
}
}